// Copyright (c) 2020 Presto Labs Pte. Ltd.
// Author: donggu, jhkim

#pragma once

#include <memory>

#include "coin2/exchange/base/market/market_exchange_api.h"
#include "coin2/exchange/base/symbology/product.h"
#include "coin2/exchange/base/symbology/product_encyclopedia.h"

#include "coin2/strategy/linear_model/lm_config.pb.h"
#include "fastfeature/feature_feed.pb.h"

#include "presto/quant/symbology/symbol_manager.h"

namespace presto {
class Symbol;
}

namespace coin2::strategy::linear_model {

class LinearModelLogic;

class LmLogicFactory {
 public:
  static std::unique_ptr<LinearModelLogic> CreateNewLmLogic(
      const MarketExchangeApi& mea,
      const ::coin2::exchange::base::symbology::IProduct& target_product,
      const ::presto::Symbol* target_symbol,
      LmProductConfig lm_product_config,
      ::coin2::exchange::base::symbology::ProductEncyclopedia* product_cache,
      const ::presto::SymbolManager* symbol_manager,
      std::shared_ptr<::fastfeature::KlineInfoProto> kline_info);
};

}  // namespace coin2::strategy::linear_model
